import { _decorator, Component, Node, Vec3, Camera, find,director } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('DefaultViewCameraFollow')
export class DefaultViewCameraFollow extends Component {
    @property({ type: Node, tooltip: "需要跟随的玩家节点" })
    player: Node = null;

    @property({ type: Vec3, tooltip: "相机与玩家的固定偏移（初始视角下的位置差）" })
    offset: Vec3 = new Vec3(0, 0, 1000); // 默认Z轴1000（和新建项目相机一致）

    @property({ type: Number, tooltip: "跟随平滑系数（0=立即跟随，建议0.1-0.3）" })
    smoothFactor: number = 0.2;

    // 状态栏节点
    @property(Node)
    statusBar:Node = null;

    @property({ type: Vec3, tooltip: "状态栏相对于相机的偏移位置（屏幕坐标）" })
    statusBarOffset: Vec3 = new Vec3(-130, 315, 0); // 默认左上角位置

    private originalOrthoHeight: number = 0; // 初始正交视野高度（保持视角大小）
    private camera: Camera = null;

    onLoad() {
        // 获取相机组件
        this.camera = this.node.getComponent(Camera);
        if (!this.camera) {
            console.error("相机节点上未挂载Camera组件！");
            return;
        }


        // 记录初始正交视野高度（确保视角大小不变）
        this.originalOrthoHeight = this.camera.orthoHeight;

        // 自动查找玩家节点
        if (!this.player) {
            this.player = find('Player');
        }
    }

    start() {
        // 初始化相机位置（基于玩家初始位置+偏移，保持初始视角）
        if (this.player) {
            this.node.position = new Vec3(
                this.player.position.x + this.offset.x,
                this.player.position.y + this.offset.y,
                this.offset.z // Z轴固定为初始值，不随玩家变化
            );
        }
    }

    lateUpdate(deltaTime: number) {
        if (!this.player || !this.camera) return;

        // 强制恢复初始正交视野（防止意外修改）
        this.camera.orthoHeight = this.originalOrthoHeight;

        // 强制固定旋转（防止任何角度偏移）
        // this.node.rotation = new Vec3(0, 0, 0);

        // 计算目标位置（仅同步X/Y，Z轴固定）
        const targetPos = new Vec3(
            this.player.position.x + this.offset.x,
            this.player.position.y + this.offset.y,
            this.offset.z
        );

        // 平滑跟随（可选，0则立即同步）
        if (this.smoothFactor > 0) {
            this.node.position = Vec3.lerp(
                new Vec3(),
                this.node.position,
                targetPos,
                this.smoothFactor
            );
        } else {
            // 无平滑，立即跟随（和初始视角移动逻辑一致）
            this.node.position = targetPos;
        }

        // 更新状态栏位置，使其跟随相机移动并固定在左上角
        if (this.statusBar) {
            this.statusBar.position = new Vec3(
                this.node.position.x + this.statusBarOffset.x,
                this.node.position.y + this.statusBarOffset.y,
                this.statusBarOffset.z
            );
        }
    }
}
